forwardRef(() => Token) wraps the reference in a lazy function. NestJS defers reading the token value until after all class declarations are evaluated — breaking the initialization deadlock. Both sides of the circular dependency must use forwardRef(), and the same applies at the module level.
The lazy function delays token resolution until after all module declarations are evaluated by the JS engine.
NestJS initially injects a Proxy object as a placeholder during construction.
Once both providers are constructed, the Proxy is replaced with the real instance.
Both sides must declare forwardRef() — omitting one side will still cause a startup failure.